home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2001 March / PC-WELT 3-2001.ISO / software / sw / utilities / proxn4.exe / ReadMe.txt < prev    next >
Encoding:
Text File  |  2000-09-03  |  30.4 KB  |  777 lines

  1. #############################################
  2. Proxomitron Version Naoko-4 BetaTwo 
  3. Beta Release Two
  4. (C) 1999, 2000 Scott R. Lemmon
  5. #############################################
  6.  
  7. This is a beta release of Proxomitron. Please keep in mind that as 
  8. such it may have problems. If you're new to Proxomitron I strongly 
  9. recommend you first download the current non-beta version available
  10. here...
  11.  
  12. http://proxomitron.cjb.net/download.html
  13.  
  14. It contains a much more complete and detailed help file on
  15. how to use Proxomitron. This beta version assumes you're already
  16. familiar with the basics of the program.
  17.  
  18.  
  19. LEGALESE:
  20.  
  21. This program is a public beta and is licensed free for
  22. individual use. However, being beta, I'd like to discourage
  23. widespread distribution of this version. Software archives
  24. in particular should distribute the most recent  full
  25. release instead.
  26.  
  27. Please keep in mind I make absolutely *no* guarantees of any
  28. kind as to the program's safety, fitness, functionality or
  29. suitability for any given purpose. Also I take no
  30. responsibility for any direct or indirect damages this
  31. program may cause - Use it at your own risk!  This is the
  32. case for all versions of Proxomitron, but being beta this
  33. version is more apt to have serious bugs.
  34.  
  35. A few features have been added since BetaOne...
  36.  
  37. * New dbug URL command shows the page in debug mode
  38.  
  39. * You can now have multiple URL commands - as in...
  40.   http://src..file//C:/web/somefile.html
  41.   http://bypass..src..www.somepage.com/
  42.  
  43. * Added a new option when using the square bracket matches [...]
  44.   to check for a specific byte values. Just enter the value within a 
  45.   URL style hex escape as in... "[%2a]" for a single char or
  46.   "[%20-%41]" for a range of values.
  47.  
  48. This fixes a number of bugs found in BetaOne Including...
  49.  
  50. * Problem with escapes within brackets (as in "[\n]")
  51.  
  52. * Bounds match rules being set to lower case
  53.  
  54. * "Minimize Proxomitron to system tray" option doing a 
  55.    erroneous SSLeay dll check.
  56.  
  57. * Crash when using some replace commands (like "\q" or "\a") in the
  58.   matching expression instead.
  59.  
  60. * Possible Priority inversion lock with IE fixed (I hope)
  61.   It appears IE might up its own priority to give it an advantage 
  62.   over other winsock apps.  That's no too smart when it's depending
  63.   on one of those other apps for its input! 
  64.  
  65.  
  66. New in version Naoko-4
  67.  
  68. Here's a quick list of most new features in Proxomitron.  It may not be
  69. complete since I'm mainly focusing on things that are not necessarily
  70. apparent from the GUI.
  71.  
  72. To Install first make a copy of your current Proxomitron folder then copy
  73. the contents of this zip into the new folder. The default.cfg included with
  74. this version has been updated to use new program features. However if you've
  75. customized your own default.cfg file you may want to merge it into the new 
  76. file then delete any duplicates.  Your original filters will be shown in red
  77. once merged (this will last until the config is reloaded).  Where filters are
  78. duplicated, you'll probably want to keep the new (black) version of any filter
  79. you haven't customized.
  80.  
  81. New features include...
  82.  
  83. * SSL Support
  84. * Matching Blocklist/Include files
  85. * Easy method to block new ads/cookies/pages/etc
  86. * Webpage Source view
  87. * Local file filtering
  88. * URL rewriting/redirecting
  89. * Easier config file loading
  90. * CGI Proxy support
  91. * Easier Proxy password
  92. * Header filter activated proxy control 
  93. * Better access control
  94. * HTTP/1.1 & persistent connection support
  95. * Many enhanced matching commands
  96.  
  97.  
  98. ## Bugs fixed ##
  99.  
  100. * Win NT and 2000 merge filter bug fixed
  101. * Menu icon color bug fixed
  102. * Various matching bugs
  103. * Problems freezing a few .gif files
  104. * Plenty of things I forgot ;-)
  105.  
  106. ## SSL Support ##
  107.  
  108. Proxomitron now supports SSL (secure https) connections.  This comes in two
  109. flavors - SSLeay mode and pass-thru mode.  The HTTP options under the
  110. "settings" dialog control which is used by default.
  111.  
  112.  
  113. SSLeay/OpenSSL mode
  114. -------------------
  115.  
  116. In this mode Proxomitron decrypt incoming data, filters it, then re-encrypts
  117. it before sending it on.  This allows for nearly transparent filtering and
  118. full control over https connections. This feat is accomplished using the
  119. very nice Open Source SSLeay/OpenSSL libraries (not included - see below).
  120.  
  121.   To use this mode Proxomitron must have access to "slleay32.dll" and
  122. "libeay32.dll" which contain all the SSL libraries and all cryptographic
  123. routines. Otherwise "Pass-Thru" mode will be used.
  124.  
  125. ################################################################
  126.  
  127. Because of all the legal and patent problems involved in the USA
  128. with any program that uses encryption, Proxomitron comes with NO
  129. ENCRYPTION CODE WHATSOEVER.  In order to filter SSL connection
  130. you must get a copy of two additional files - "slleay32.dll" and
  131. "libeay32.dll".  These files are part of the SSLeay/OpenSSL
  132. library and contain all the needed routines to do SSL encryption
  133. and decryption. In order to work they should be relatively recent
  134. versions and must be complied with all algorithms needed for
  135. https. I know it's a pain but it's the only safe way I know 
  136. to offer SSL support.
  137.  
  138. The .DLL files can often be found as part of other programs that
  139. use SSL. The open-source "stunnel" application is one example. 
  140. If you can locate a binary distribution of stunnel for Win32 you
  141. should be able to find the two dll's with it. Finding them is the
  142. hard part - once you do, just copy the two files into Proxomitron's
  143. program folder and check "Use SSLeay/OpenSSL" under the "HTTP" 
  144. section of Proxomitron's config dialog.
  145.  
  146. Here's a few URLs where compatible ssleay .dlls could be found 
  147. (at least at one time). However since these are independent sites
  148. with no relation to Proxomitron this could change at any time...
  149.  
  150. http://www.attrition.org/~wrlwnd/crypto/ssl/stunnel/dlls.zip
  151. http://packetstorm.securify.com/crypt/SSL/stunnel/dlls.zip
  152. http://opensores.thebunker.net/pub/mirrors/stunnel/dlls.zip
  153.  
  154. ftp://mike.daewoo.com.pl/pub/stunnel/Win32/ (as separate files)
  155.  
  156. NOTE: If anyone wishes to mirror these files and is located
  157.       somewhere legally able to do so please let me know.  
  158.       
  159. ##################################################################
  160.  
  161.  
  162. Server Certificates And Such:
  163.  
  164. There are some other limitations to this. In order for Proxomitron to
  165. act as a SSL server it must have a "Certificate".  Certificates are
  166. used by web servers to identify themselves to your web browser. They
  167. must be digitally "signed" by a known company like VeriSign or your
  168. browser will generate a warning.
  169.  
  170. Proxomitron's certificate is located in the "proxcert.pem" file.  It's
  171. a self-signed certificate created using SSLeay (if you're familiar
  172. with SSLeay you could create a certificate of your own). As such it
  173. should *not* be considered secure.  However it's only used for the
  174. connection between Proxomitron and your web browser - the connection
  175. between Proxomitron and the remote site *is* secure since it relies on
  176. the site's certificate not Proxomitron's.  Normally the local
  177. connection to your browser never passes outside your PC, so its
  178. security isn't really an issue.  In fact, the only reason to encrypt
  179. it at all is to make your browser think it's connecting directly to a
  180. secure site.
  181.  
  182. This does have a few drawbacks though. When you first visit a secure
  183. site being filtered through Proxomitron, your browser will usually
  184. issue a warning.  This happens for two reasons. First Proxomitron's
  185. certificate won't initially be recognized by your browser (normally
  186. you'll be allowed to add it though). Secondly, Proxomitron's
  187. certificate will not match the name of the site your visiting (since
  188. it can't know that ahead of time).
  189.  
  190. Unfortunately (or perhaps fortunately) these warning are unavoidable
  191. since SSL was intentionally designed to prevent an intermediary from
  192. secretly intercepting your data. Proxomitron *is* intercepting your
  193. data, but under your control.
  194.  
  195. One way around this is to use a sort of "half-SSL" technique. 
  196. Proxomitron lets you specify in a normal non-secure "http://" URL that
  197. you want to make a SSL connection to the actual web server - just write
  198. the URL like so...
  199.  
  200. Original:  https://some.secure.site.com/
  201. New     :  http://https..some.secure.site.com/
  202.  
  203. Change the protocol back to "http://" then add "https.." to the front of the
  204. hostname. This make it so the connection between your browser and
  205. Proxomitron is not encrypted but the connection from Proxomitron to the
  206. final server is! Since the local connection to Proxomitron is usually
  207. confined to your PC alone, this is really no less secure.  However your
  208. browser thinks it's got a normal insecure connection and won't do any
  209. certificate checks. This can also be used to access secure pages from
  210. browsers that may not have https support at all.
  211.  
  212. Also beware that Proxomitron does no certificate checking of it's own! If
  213. you don't trust a website and wish to check that it has a valid certificate
  214. put Proxomitron in "Bypass" mode. This will allow your browser to
  215. validate the site as it normally would.
  216.  
  217. Keep in mind certificates are just used to help insure your actually
  218. connecting to the site you think you are and not some "spoofed" site.
  219. Whether they actually do this or not is debatable. Still,  they have nothing
  220. to do with how encrypted your data is. Many sites (especially smaller ones)
  221. may not be using properly "signed" certificates, but this doesn't mean
  222. you're not secure connecting to them. Really all it means is they didn't
  223. cough up some money for VeriSign's official stamp of approval.  Likewise, a
  224. valid certificate is no guarantee a site won't rip you off - you must still
  225. be careful before trusting a site with sensitive data.
  226.  
  227.  
  228. Pass-Thru mode
  229. --------------
  230.  
  231. This is similar to the support offered by many other proxies. In this mode
  232. SSL data is simply passed to the server without any alteration.  This mode
  233. requires no special cytological support as the data is never decoded. 
  234. However this method also gives little benefit except to allow proxy
  235. switching. Proxomitron will always use pass-thru mode when bypassed, and
  236. when the "Use SSLeay" mode is not enabled (or the SSLeay dll files are not
  237. present).
  238.  
  239.  
  240. ## Proxy Related Stuff ##
  241.  
  242. CGI PROXY SUPPORT:
  243. ------------------
  244.  
  245. Proxies that use a URL prefix can now be used in Proxomitron.  Simply add
  246. the URL to the proxy selector as you would a normal proxy (but the http://
  247. isn't required). The only restriction is that the proxy must work by tacking
  248. the destination URL to the end.  For example, if the proxy was...
  249.  
  250. http://somehost.com/cgi-bin/proxy.cgi/
  251.  
  252. and you were connecting to...
  253.  
  254. http://anotherhost.com/some/webpage.html
  255.  
  256. Then Proxomitron will automatically form...
  257.  
  258. somehost.com/cgi-bin/proxy.cgi/http://anotherhost.com/some/webpage.html
  259.  
  260. While a DeleGate style proxy might look like...
  261.  
  262. www.delegate.com:8080/-_-
  263.  
  264. and form...
  265.  
  266. www.delegate.com:8080/-_-http://anotherhost.com/some/webpage.html
  267.  
  268. Just like in a web browser multiple CGI style proxies can be chained by
  269. simply combining them together...
  270.  
  271. somehost.com/cgi-bin/proxy.cgi/http://www.delegate.com:8080/-_-http://anotherhost.com/some/webpage.html
  272.  
  273. CHAINING REGULAR A PROXY TO CGI PROXIES:
  274. ----------------------------------------
  275.  
  276. In addition to CGI proxies it's also possible to chain a regular proxy to the
  277. start of the list.  This is the equivalent of using a normal proxy in your
  278. browser while also using a CGI proxy.  The syntax for this is to use '->'
  279. like so...
  280.  
  281. www.aproxy.com:8080->somehost.com/cgi-bin/proxy.cgi/
  282.  
  283.  
  284. ## Block List Files ##
  285.  
  286. Proxomitron now supports block lists. Most often they'll contain lists of
  287. URLs to use with a filter. 
  288.  
  289. Actually "block list" is a bit of a misnomer though, since they can do much
  290. more than just block. In fact, they're really an extension of the normal
  291. matching expressions. A block list is a simply a text file containing a list
  292. of matching items.  Each line in the list is checked until a match is found
  293. - otherwise the list returns false. Every block list file has a name (in the
  294. settings dialog), and can be included at any point in a matching expression
  295. by using "$LST(listname)". Most often this will be used in a filter's the
  296. URL match, but it's not limited to URLs alone.  A list can contain any
  297. matching commands - even calls to other lists!
  298.  
  299. You can also add "exclude" lines By prefixing a line with the '~' character.
  300. They can be used to limit what a list will match, and are only checked if a
  301. regular match is found first in the list. The list will return as true only
  302. if *none* of the exclude lines match.
  303.  
  304. Lists can also be called in the replacement text.  Here they're not really
  305. used to match anything but instead are used to set a positional variable to
  306. some value.  By using the $CON(#,#) matching command, replacement text
  307. variables can be rotated based on the connection number (like multiple
  308. User-Agents or browser versions for instance). 
  309.  
  310. You can have up to 255 different lists and use them in any way you like. 
  311. Common uses could include URLs to kill, sites to accept cookies from, pages
  312. to disable or enable JavaScript on, etc.  Once set up to use a list, an "Add
  313. to blockfile" option on Proxomitron's system tray menu makes adding new URLs
  314. to a list fairly easy. Just copy a URL to the clipboard and it'll be
  315. auto-pasted into the dialog.
  316.  
  317. Normally, each line in a list is treated as an independent matching
  318. expression. However long expressions can be broken up over multiple lines
  319. by indenting the lines that follow. For example...
  320.  
  321. taste (this|that|these|those|the other thing)
  322.  
  323. could also be written as....
  324.  
  325. taste (
  326.   this|
  327.   that|
  328.   these|
  329.   those|
  330.   the other thing)
  331.  
  332. The effect is exactly the same, but you can break long lines up for easier
  333. reading - leading or trailing whitespace on each line will be ignored.
  334.  
  335. List can contain comments by beginning a line with '#'. Comments normally
  336. will be ignored, but the first few lines of a list are scanned for certain
  337. "keywords" which can affect how the list works.  Currently there are two
  338. keywords "NOADDURL" and "junkbuster".
  339.  
  340. "NOADDURL" hides the list from the "Add to blockfile" menu. It's useful to
  341. keep it from becoming cluttered by lists not used for URL matches.
  342.  
  343. "JunkBuster" if found, will cause Proxomitron to attempt to read and
  344. interpret the list as a JunkBuster style blockfile.  It's probably less than
  345. perfect, but seems to work fairly well with most JunkBuster lists.
  346.  
  347. Note that due to differences in methodology, designing your own list by
  348. adding URLs as you find them will likely be more efficient.  In particular,
  349. JunkBuster processes hostnames in reverse (root first).  Proxomitron treats
  350. a URL the same as any random text, so you're better off not using an initial
  351. wildcard. For instance, "(www.|)somehost.com" will be much faster than
  352. "*somehost.com".  If you need a leading wildcard try "[^/]++somehost.com".
  353. It's a little better than '*' since it only scans up to the first "/" in the
  354. URL.
  355.  
  356.  
  357. ## URL: type header filter ##
  358.  
  359. When designing a header filter the header "URL:" now has special
  360. meaning. Although not an actual header, it can be used to filter
  361. the URL itself - taking some action based on the URL alone or
  362. redirecting the URL to a new location.
  363.  
  364. When you use "URL: [description]" as a header's name the
  365. "matching" section like the "URL" section will match against the
  366. URL itself.  The only difference being the "matching" section
  367. includes the "http://" or "https://" portion in the match. 
  368.  
  369. To redirect the URL the replace section can include a $JUMP or
  370. $RDIR command (see below) which can include portions of the
  371. original URL captured into positional variables.  Take for
  372. example....
  373.  
  374.   Out = "True"
  375.   Key = "URL: MS Redirect"
  376.   Matching="http://www.mirosoft.com/\0"
  377.   Replace="$RDIR(http://www.microsloth.com/\0)"
  378.  
  379. This would invisibly redirect any URL going to "microsoft" to
  380. "microsloth" instead! Rather than creating a filter for every
  381. redirection, It's also possible to use the list "$LST(Listname)"
  382. function to create a list of redirections. Take a filter like the
  383. following...
  384.  
  385.   Out = "True"
  386.   Key = "URL: Redirect List"
  387.   Match = "http://$LST(RedirectList)"
  388.  
  389. or just...
  390.  
  391.   Out = "True"
  392.   Key = "URL: Redirect List"
  393.   URL = "$LST(RedirectList)"
  394.  
  395. "RedirectList" could then point to a text file containing the
  396. following....
  397.  
  398.   #
  399.   # Proxomitron Redirection List
  400.   # NOADDURL
  401.   #
  402.  
  403.   ms/ $JUMP(http://www.microsoft.com/)
  404.   sd/ $JUMP(http://www.slashdot.org/)
  405.   mail/ $JUMP(http://my.email.site.com/)
  406.  
  407. This, in effect, sets up a list of "aliases" for sites you visit
  408. often. You could then enter only "mail" in your browser to go to
  409. your email page for instance.
  410.  
  411. Another use would be to redirect know advertisers to an image of
  412. your choosing. For instance...
  413.  
  414.   Out = "True"
  415.   Key = "URL: Spam Redirect"
  416.   Match = "http://$LST(SpamList)"
  417.   Replace = "$RDIR(http://file//C:/images/spam.gif)"
  418.  
  419.  
  420. The "SpamList" could then contain...
  421.  
  422.   #
  423.   # Proxomitron Anti-Spam List
  424.   #
  425.  
  426.   www.doubleclick.net
  427.   [a-z]+.flycast.com
  428.  
  429. and so on....
  430.  
  431.  
  432. ## URL commands ##
  433.  
  434. When requesting a page in your browser, it's now possible to embed certain
  435. commands in any URL to make it perform some additional function in
  436. Proxomitron. Commands are tacked onto the start of the hostname separated by
  437. either two dots '..' or two slashes '//'.  
  438.  
  439. http://command..www.host.com/rest/of/url.html
  440.  
  441. Here's a list of the current commands...
  442.  
  443. http://file//path
  444.     Used to filter a local file as if it were a web page. Similar to
  445.     the file:// URL used by most browsers.
  446. http://bypass..www.host.com/some/webpage
  447.     Use to bypass filtering for a specific URL only.
  448. http://https..www.host.com/some/secure/webpage
  449.     Use to load a 'secure' https: web page without having the local page
  450.     encrypted. Can be use to access secure pages from browsers that don't
  451.     directly support https, or to avoid the normal https warning messages
  452.     a browser may spit out. The actual remote connection is still encrypted,
  453.     but Proxomitron sends the decrypted and filtered page to your browser.
  454.     Note: requires SSLeay/OpenSSL .dll files to work.
  455. http://src..www.host.com/some/webpage
  456.     Displays the *true* source of any web page
  457.     (unaffected by JavaScript commands or dynamic HTML).
  458.     Useful when the browser won't let you see the source
  459.     or dynamic HTML alters it.
  460. http://dbug..www.host.com/some/webpage
  461.     Displays the source like "src.." but also cause debug information to
  462.     be included showing what text each web filter matched.  Similar to 
  463.     turning on the "HTML Debug Info" option in the log window.
  464. http://load//filename?url
  465.     Used to load a Proxomitron config file.  Path points to
  466.     the file to load. It can optionally be followed by a '?'
  467.     and a URL to go to once the config has been loaded.  If the config
  468.     is within the Proxomitron directory, it's not necessary to
  469.     type the full path...
  470.    
  471.     http://load//default.cfg?http://www.microsoft.com/
  472.  
  473. It's also possible to string multiple URL commands together as in...
  474.     http://src..bypass..www.host.com/some/webpage
  475.  
  476.  
  477. ## New matching codes  ##
  478.  
  479. + -  The run matching command has been changed slightly.  It will now
  480.      match 0 or more of a given expression (instead of 1 or more). 
  481.      You can use it with brackets to enforce minimum number of matches
  482.      if needed like so...  
  483.      a+{1,*}
  484.      Will match 1 or more a's
  485.  
  486.  
  487. ++ - Like '+' will match a run of items, but '++' will only match
  488.      up to the point where what follows is true. It works very
  489.      much like '.*' does in UNIX style regexps
  490.     
  491. Examples:  "[^ >]++"   will work similar to "\w"
  492.            "[a-z]++boat"  given the word "lifeboat" will
  493.            match only "life" (while "[a-z]+" would match
  494.            all of "lifeboat")
  495.           
  496. {min,max} or {exact number} or {min,*}
  497.  
  498. Either '+' or '++' can now be followed by brackets to limit the number of
  499. repetitions matched. For example, "?+{6}" will match six characters while
  500. "?+{6,12}" needs at least 6 characters to match but will match no more than
  501. 12 characters.  '*' can be used for no max as in "foo++{6,*}bar" needs at
  502. least six "foo"s to  match but can have more. 
  503.  
  504. [#x:y] or [#x]
  505.  
  506. The numeric match can now test for negative numbers. In this case
  507. use ':' instead of '-' to separate the numbers.  For instance
  508. "[#-400]"  will match negative 400 exactly.
  509. "[#-100:-50]" will match any number between -100 and -50
  510. "[#-500:500]" will match any number between -500 and +500
  511.  
  512.  
  513. ## The Replacement Stack (\# and \@ commands) ##
  514.  
  515. Normally Proxomitron supports ten matching variables \0 to \9. In most
  516. cases this works fairly well, but what if you want to match each iteration
  517. of a matched run?  For example, say you had a filter that broke a URL into
  518. segments divided by the "/" character.  You could do this with a match like
  519. so...
  520.  
  521. http://(*/)+
  522.  
  523. However, up till now there's been no way to capture each segment into a
  524. *different* variable. this is where the replacement stack comes in.  It
  525. uses the special character "\#" which like "\0" through "\9" stores a
  526. matched value.  However each time it's called it stores the matched value
  527. into a "stack" which can hold up to 20 items. It can then be used in the
  528. replacement text to "pop" an item off that stack in a first-in first-out
  529. manner.  Using this we could write the above match like so...
  530.  
  531. "http://(\#/)+\#"
  532.  
  533. Given a replacement text of...
  534.  
  535. "\# \# \# \# \# \# \#"
  536.  
  537. It would convert this...
  538.  
  539. "http://this/is/a/test/of/the/stack.html"
  540.  
  541. into this...
  542.  
  543. "this is a test of the stack.html"
  544.  
  545. Each iteration of the (...)+ run pushes a different value onto the stack,
  546. then whatever's left over gets matched by the final "\#".
  547.  
  548. Like the other positional variables, the stack variable can be used
  549. directly after a set of parens to capture the expression within.  For
  550. instance...
  551.  
  552. "http://(*/)\#+\#"
  553.  
  554. would produce...
  555.  
  556. "this/ is/ a/ test/ of/ the/ stack.html"
  557.  
  558. The replacement text also recognizes another special escape "\@".  This
  559. just dumps the entire contents of the stack in order (like using
  560. \#\#\#\#\#\#\#\#...). 
  561.  
  562.  
  563. ## New matching commands ##
  564.  
  565. An extensible syntax for matching subroutines has been added to Proxomitron.
  566. All these commands begin with "$" followed by the command name, a "(", any
  567. command parameters, finally ending with ")".  All commands must be upper
  568. case to help reduce possible conflicts.  Usually it's not necessary to
  569. escape the "$" when matching unless it would conflict exactly with an
  570. existing command. A command can also optionally be followed by a ';' but
  571. this isn't required and is purely to appease us 'C' folk.
  572.  
  573. Generally matching functions are designed to be used in the "matching"
  574. portion of a filter, but a few like $JUMP and $LST may also be used in a 
  575. filter's replacement text.
  576.  
  577. $CMD(parameter values)
  578.  
  579.  
  580. $LST(blockfile)
  581.  
  582. Is used to include a blockfile in any matching expression.  The contents of
  583. the blockfile are tested line by line against the text to be matched until a
  584. match is found. Otherwise the expression returns false.
  585.  
  586.  
  587. $SET(#=value)
  588.  
  589. Use to set a positional variable to a specific value.  Any replacement text,
  590. including other variables, can be set entered here.
  591.  
  592. Example: set variable 1 equal to "foobar"
  593.          $SET(1=foobar)
  594.          Set variable \1 to print the contents of \2
  595.          $SET(1=Two is \2)
  596.  
  597. By placing $SET commands within a matching expression, you can set various
  598. values *only* if the matching expression reaches that point. This can be
  599. used for an if/then/else effect...
  600.  
  601. match: name=(one $SET(0=Naoko) | two $SET(0=Atsuko) |
  602.              three $SET(0=Michie) | $SET(0=Default))
  603.  
  604. replace: "\0 Matched"
  605.  
  606. will produce the following results...
  607.  
  608. if name=one   -> "Naoko Matched"
  609. if name=two   -> "Atsuko Matched"
  610. if name=three -> "Michie Matched"
  611. else          -> "Default matched"
  612.  
  613.  
  614. $CON:(x,y[,z])
  615.  
  616. Will be true only if the current connection number is 'x' of 'y' (optionally
  617. for every 'z' connections). Use to rotate values based on connection. The
  618. following for example will rotate between three values in \0 ...
  619.  
  620. ($CON(1,3) $SET(0=Value one of three)|
  621.  $CON(2,3) $SET(0=Value two of three)|
  622.  $CON(3,3) $SET(0=Value three of three))
  623.  
  624. use the 'z' option to delay the rotation to every so many connections.
  625.  
  626.  
  627. $IHDR(header-name:matching)
  628. $OHDR(header-name:matching)
  629.  
  630. Can be use to test the value of any HTTP header. The command will be true
  631. only if the named header's value matches the 'matching' section. $OHDR test
  632. outputed headers while $IHDR tests incoming headers. For example this will
  633. only match is the "Referer" header contains 'microsoft.com'
  634.  
  635. $OHDR(Referer:*.microsoft.com)
  636.  
  637. Using these you can have web filter only match if specific header values are
  638. also true, or to capture and use header values into a variables to use in a
  639. filter's replacement.  You can use also them in HTTP header filters to check
  640. combinations of headers for a match.
  641.  
  642. $URL(matching)
  643.  
  644. This can be used to test the URL inside the matching portion of a filter.  
  645. Normally you would use the filter's URL match for this, but by using this
  646. command you can check for different URL based on the text matched. It's also
  647. useful to capture portions of a URL into variables.  The following would
  648. capture the URL's path...
  649.  
  650. $URL(www.somehost.com/\1)  
  651.  
  652. As elsewhere, the URL matching starts directly with the hostname so there's
  653. no need to match the "http://" portion.
  654.  
  655.  
  656. $CTYP(code)
  657.  
  658. Content Type check command. This command can be used to limit a filter to
  659. only affect certain types of pages (like JavaScript files only). The "code"
  660. must be one of the following known types...
  661.  
  662. htm  - Web pages
  663. css  - Cascading style sheets
  664. js   - JavaScript
  665. vbs  - VB Script
  666. oth  - Anything else
  667.  
  668. This is a fast and simple check. For more complex content-type checks you
  669. can also use "$OHDR(Content-Type:some matching value)"
  670.  
  671.  
  672. $RDIR(http://some.url.com/)
  673.  
  674. The RDIR (redirect) command is used to transparently redirect URLs to a different
  675. location. It's also possible to redirect to a local file by using the
  676. "http://file//filename" URL command syntax.   The new URL must be of a type
  677. Proxomitron understands (http, or with SSLeay, https).
  678.  
  679.  
  680. $JUMP(http://some.url.com/)
  681.  
  682. Similar to the RDIR command, the JUMP command can be used to redirect a 
  683. URL to a different location.  However instead of transparent redirection
  684. this works by just telling your browser to go to that new location. It's
  685. more like using a refresh "meta" tag or setting document.location in
  686. a JavaScript.
  687.  
  688. With JUMP your browser is aware of the redirection and the URL you see
  689. will be updated to reflect the new location.  It works best for redirecting
  690. an entire page, while RDIR is better at invisibly redirecting individual
  691. page elements like images or java apps.  Use RDIR when you want the
  692. redirection to happen "behind the scenes" and use JUMP when you want to
  693. simply go to a different site from the one requested.
  694.  
  695. Use both RDIR and JUMP commands in the replacement section of *header*
  696. filters only. It's important to note that for outgoing headers the redirect
  697. will happen before the original site is ever contacted, but when used with
  698. incoming headers, the initial site must be contacted first.  These commands
  699. have no effect in web filters since by this point the original page
  700. has already begun loading into your browser. In such cases you can
  701. often use JavaScript to change to a new location as in...
  702.  
  703. <script> document.location="http://some.new.url/"; </script>
  704.  
  705.  
  706. $FILTER(bool)
  707.  
  708. The $FILTER command can be used to force a particular request to be filtered
  709. or not filtered regardless of it's type.  Normally only specific types are
  710. filtered (like text/html, text/css, image/gif, etc).  $FILTER can be used in
  711. the match or replace of any header filter and takes a "true" or "false" 
  712. value.  If true, the request will be run through the web filters regardless
  713. of it's type.  This only makes sense for content that's text based. 
  714.  
  715. You can also use it to avoid "freezing" certain GIF images by using it in
  716. a header filter along with a URL match.
  717.  
  718. Take for example...
  719.  
  720. Out = "True"
  721. Key="URL: Don't freeze this gif"
  722. URL="www.somewhere.com/animate_me.gif"
  723. Replace="$FILTER(False)"
  724.  
  725.  
  726. $USEPROXY(bool)
  727.  
  728. The $USEPROXY command can override the "Use remote proxy" check box for a 
  729. given connection either turning the proxy on or off. It can be use to ensure
  730. a proxy is or isn't used for with a given site or for a particular action.
  731.  
  732. To have effect this command must be called in either the match or replace
  733. of an *outgoing* header filter. This is because the proxy setting must be
  734. established prior to connecting to the site.
  735.  
  736.  
  737. $SETPROXY(proxy:port)
  738.  
  739. The $SETPROXY command will force a connection to use a particular proxy. It
  740. overrides both the "Use remote proxy" checkbox and the current proxy chosen
  741. in the proxy selector. It's useful for insuring a particular proxy is used
  742. in a given situation or with a particular URL.
  743.  
  744. The proxy to set *must* be one entered into the External Proxy Selector list.
  745. This command simply looks up and sets a proxy from that list.  It's usually 
  746. only necessary type the first part of the proxy name - the first proxy 
  747. matched in the list will be use. The partial match must be exact
  748. though (no wildcards).
  749.  
  750. Like the previous command  this command must be also called in either
  751. the match or replace of an *outgoing* header filter.
  752.  
  753.  
  754. $UESC(escaped text)
  755.  
  756. The $UESC command is intended to be similar to the JavaScript unescape()
  757. command. It will convert most URL escaped characters back to their ASCII
  758. form. It's useful for unescaping URLs that may be embedded in other URLs
  759. (an increasingly common trick used by many sites to track the links you
  760. click). Often characters like ":" and "/" will be escaped by their hex
  761. equivilents ("%3A" and "%2F") making the real URL hard to use.
  762.  
  763. $UESC can be used in the replacement text of a filter, and can be given 
  764. any valid replacement text as input (such as \1 variables). It will
  765. convert most escaped characters back to their correct form, but spaces 
  766. and any non-displayable ASCII characters will remain escaped.
  767.  
  768. +++++++++++++++++++
  769.  
  770. Well that's about it for now.  Many of the new features in "settings" I hope
  771. are more or less self-explanatory, but feel free to email me if you've got
  772. any questions.  Also check the various context menus as blocklist features
  773. have been added to many of 'em.  Keep in mind all this stuff could easily
  774. change a before an actual release - especially the syntax of new commands.
  775. I'm not exactly sure what will work best yet in all areas.
  776.  
  777. -Scott-